{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Machine Learing Nano Degree\n",
    "## Gender Recognition by Voice\n",
    "## Model Training"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this project, I will try several **suprivised** machine learning algorithm on 3168 samples to predict gender accurately.\n",
    "\n",
    "First, I will try several models. Then, the best model will be optimized to achieve best performance.\n",
    "\n",
    "My goal is to construct a model to predict gender accurately.\n",
    "\n",
    "Dataset comes from [kaggle](https://www.kaggle.com/primaryobjects/voicegender). Features have been extracted by R packages, seewave and tuneR."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## Preparation\n",
    "Load the necessary Python libraries and load preprocessed sets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import pickle\n",
    "from time import time\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('train_set.pkl', 'rb') as f:\n",
    "    X_train, y_train = pickle.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('val_set.pkl', 'rb') as f:\n",
    "    X_val, y_val = pickle.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('test_set.pkl', 'rb') as f:\n",
    "    X_test, y_test = pickle.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('all_feature_min_max.pkl', 'rb') as f:\n",
    "    features_min, features_max = pickle.load(f)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## Evaluation of Performance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Evaluation Standards\n",
    "This project is aimed to distinguish voice of male and female. The importance equals. So precision and recall rate means nothing. Thus, **accuracy** is evaluation standards."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Naive Model\n",
    "If we simply predict every voice is female, we can achieve an accuracy of 50%."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Surprivised Machine Learning Models\n",
    "### Candidate Models\n",
    "- LogisticRegression\n",
    "- DecisionTree\n",
    "- RandomForest\n",
    "- SVM"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Advantages and Disadvantages\n",
    "Reference:\n",
    "\n",
    "- http://blog.sciencenet.cn/blog-520608-745856.html\n",
    "- https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms\n",
    "- http://idatamining.net/blog/?p=1179"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Model 1\n",
    "- Name: LogisticRegression\n",
    "- Advantages:\n",
    "    - Fast\n",
    "    - Simple\n",
    "    - Giving correlation of features\n",
    "- Disadvantages:\n",
    "    - Cannot work well directly at dataset of unlinear correlation\n",
    "    - Needing conversion for more complex correlation\n",
    "    - Easily under-fitted\n",
    "    - Poor at large feature space"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Model 2\n",
    "- Name: DecisionTree\n",
    "- Advantages:\n",
    "    - Able to describe nonlinear correlation\n",
    "    - Fast\n",
    "    - Explanatory\n",
    "    - Compatible with missing features\n",
    "- Disadvantage:\n",
    "    - Easily over-fitted"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Model 3\n",
    "- Name: RandomForest\n",
    "- Advantages:\n",
    "    - Able to process large feature space\n",
    "    - Compatible with missing features\n",
    "    - Explanatory\n",
    "- Disadvantages:\n",
    "    - Over-fit at dataset with much noise"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Model 4\n",
    "- Name: SVM\n",
    "- Advantages:\n",
    "    - Generalization\n",
    "    - Able to process nolinear correlation\n",
    "- Disadvantages:\n",
    "    - Sensible to kernel function\n",
    "    - Slow\n",
    "    - Little explanatory"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Predicting and Evaluating Pipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "def train_predict(learner, sample_size, X_train, y_train, X_val, y_val): \n",
    "    '''\n",
    "    Automatically train, predict model and record consuming time.\n",
    "    : learner: the model to be trained and predicted\n",
    "    : sample_size: the size of samples to train\n",
    "    : X_train: features of training set\n",
    "    : y_train: label of training set\n",
    "    : X_val: features of validation set\n",
    "    : y_val: label of validation set\n",
    "    : return: a dict containing \"train_time\", \"pred_time\", \"acc_train\", \"acc_val\".\n",
    "    '''\n",
    "    \n",
    "    results = {}\n",
    "    \n",
    "    # train and record time\n",
    "    start = time()\n",
    "    learner = learner.fit(X_train[:sample_size], y_train[:sample_size])\n",
    "    end = time()\n",
    "    \n",
    "    # get time for training\n",
    "    results['train_time'] = end - start\n",
    "    \n",
    "    # predict validation and train set, and record time\n",
    "    start = time()\n",
    "    predictions_val = learner.predict(X_val)\n",
    "    predictions_train = learner.predict(X_train)\n",
    "    end = time()\n",
    "    #predictions_train = [round(value) for value in predictions_train]\n",
    "    #predictions_val = [round(value) for value in predictions_val]\n",
    "    \n",
    "    # get predict time\n",
    "    results['pred_time'] = end - start\n",
    "            \n",
    "    # get training accuracy\n",
    "    results['acc_train'] = accuracy_score(y_train, predictions_train)\n",
    "        \n",
    "    # get validation accuaray\n",
    "    results['acc_val'] = accuracy_score(y_val, predictions_val)\n",
    "    \n",
    "    print(\"{} trained on {} samples.\".format(learner.__class__.__name__, sample_size))\n",
    "        \n",
    "    return results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Evaluate Models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression trained on 20 samples.\n",
      "LogisticRegression trained on 202 samples.\n",
      "LogisticRegression trained on 2027 samples.\n",
      "DecisionTreeClassifier trained on 20 samples.\n",
      "DecisionTreeClassifier trained on 202 samples.\n",
      "DecisionTreeClassifier trained on 2027 samples.\n",
      "RandomForestClassifier trained on 20 samples.\n",
      "RandomForestClassifier trained on 202 samples.\n",
      "RandomForestClassifier trained on 2027 samples.\n",
      "SVC trained on 20 samples.\n",
      "SVC trained on 202 samples.\n",
      "SVC trained on 2027 samples.\n"
     ]
    }
   ],
   "source": [
    "# import models\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "# init\n",
    "clf_A = LogisticRegression(random_state = 68)\n",
    "clf_B = DecisionTreeClassifier(random_state = 157)\n",
    "clf_C = RandomForestClassifier(random_state = 271)\n",
    "clf_D = SVC(random_state = 352)\n",
    "\n",
    "# get 1% 10% 100% sample size\n",
    "samples_1 = int(len(X_train) * 0.01)\n",
    "samples_10 = int(len(X_train) * 0.1)\n",
    "samples_100 = len(X_train)\n",
    "\n",
    "# collect results\n",
    "results = {}\n",
    "for clf in [clf_A, clf_B, clf_C, clf_D]:\n",
    "    clf_name = clf.__class__.__name__\n",
    "    results[clf_name] = {}\n",
    "    for i, samples in enumerate([samples_1, samples_10, samples_100]):\n",
    "        results[clf_name][i] = train_predict(clf, samples, X_train, y_train, X_val, y_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x1728 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# show results\n",
    "fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize = (15, 24))\n",
    "for axi, compare in zip([ax1, ax2, ax3, ax4], [\"train_time\", \"pred_time\", \"acc_train\", \"acc_val\"]):\n",
    "    x = [\"{}_{}\".format(clf_name, samples) \n",
    "         for samples in [samples_1, samples_10, samples_100]\n",
    "         for clf_name in [\"Log\", \"DecTree\", \"Random\", \"SVC\"]]\n",
    "    y = [results[clf.__class__.__name__][i][compare] \n",
    "         for i in range(3)\n",
    "         for clf in [clf_A, clf_B, clf_C, clf_D] ]\n",
    "    if axi is ax4:\n",
    "        plt.ylim((0.4, 1))\n",
    "    sns.barplot(x, y, ax = axi)\n",
    "    axi.set_ylabel(compare)\n",
    "        \n",
    "plt.show()\n",
    "fig.savefig(\"Four_model_compare.svg\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## Optimize Model\n",
    "Use GridSearchCV to optimize the models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 277,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# import model selection\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import make_scorer\n",
    "from sklearn.model_selection import KFold\n",
    "\n",
    "def optimize_model(learner, parameters, X_train, y_train, X_val, y_val):\n",
    "\n",
    "    results = {}\n",
    "    \n",
    "    # use grid search, accuarcy as scoring standard, 5 fold\n",
    "    grid_obj = GridSearchCV(learner, parameters, scoring = \"accuracy\", cv = 4)\n",
    "\n",
    "    # use train data to get best parameters\n",
    "    grid_obj.fit(X_train, y_train)\n",
    "\n",
    "    # print best parameters\n",
    "    print(\"{}'s best parameters: {}\".format(learner.__class__.__name__, grid_obj.best_params_))\n",
    "    \n",
    "    # get best estimator\n",
    "    best_learner = grid_obj.best_estimator_\n",
    "    \n",
    "    start = time()\n",
    "    clone(best_learner).fit(X_train, y_train)\n",
    "    end = time()\n",
    "    \n",
    "    # get time for training\n",
    "    results['train_time'] = end - start\n",
    "    \n",
    "    # predict validation and train set, and record time\n",
    "    start = time()\n",
    "    predictions_val = best_learner.predict(X_val)\n",
    "    predictions_train = best_learner.predict(X_train)\n",
    "    end = time()\n",
    "    \n",
    "    # get predict time\n",
    "    results['pred_time'] = end - start\n",
    "            \n",
    "    # get training accuracy\n",
    "    results['acc_train'] = accuracy_score(y_train, predictions_train)\n",
    "        \n",
    "    # get validation accuaray\n",
    "    results['acc_val'] = accuracy_score(y_val, predictions_val)\n",
    "    \n",
    "    return best_learner, results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Optimized parameters:\n",
    "- LogisticRegression:\n",
    "    - C: Inverse of regularization strength. Smaller, stronger regularization\n",
    "    - solver: Algorithm to use to optimize\n",
    "\n",
    "- DecisionTree:\n",
    "    - criterion: How to calculate the quality of a split\n",
    "    - max_depth: The max depth of the tree\n",
    "    \n",
    "- RandomForest:\n",
    "    - n_estimators: The number of trees.\n",
    "    - criterion\n",
    "    - max_depth\n",
    "    \n",
    "- SVC:\n",
    "    - C: penalty of the error term\n",
    "    - gamma: kernel coefficient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 367,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression's best parameters: {'C': 2.0, 'solver': 'liblinear'}\n",
      "DecisionTreeClassifier's best parameters: {'criterion': 'entropy', 'max_depth': 8}\n",
      "RandomForestClassifier's best parameters: {'criterion': 'entropy', 'max_depth': 12, 'n_estimators': 100}\n",
      "SVC's best parameters: {'C': 1.0, 'gamma': 5}\n"
     ]
    }
   ],
   "source": [
    "# init model\n",
    "clf_A = LogisticRegression(random_state = 68)\n",
    "clf_B = DecisionTreeClassifier(random_state = 157)\n",
    "clf_C = RandomForestClassifier(random_state = 271)\n",
    "clf_D = SVC(random_state = 452)\n",
    "\n",
    "# the parameters to try\n",
    "parameters_A = {\n",
    "    \"C\": [0.5, 1.0, 2.0],\n",
    "    \"solver\": ['liblinear', 'sag', 'saga']\n",
    "}\n",
    "\n",
    "parameters_B = {\n",
    "    \"criterion\": [\"gini\", \"entropy\"],\n",
    "    \"max_depth\": [8, 10, 12]\n",
    "}\n",
    "\n",
    "parameters_C = {\n",
    "    \"n_estimators\": [50, 100, 200],\n",
    "    \"criterion\": [\"gini\", \"entropy\"],\n",
    "    \"max_depth\": [8, 10, 12]\n",
    "}\n",
    "\n",
    "parameters_D = {\n",
    "    \"C\": [0.1, 0.5, 1.0],\n",
    "    \"gamma\": [1, 3, 5, 7]\n",
    "}\n",
    "# collect results\n",
    "results = {}\n",
    "best_clf = {}\n",
    "for (clf, parameters) in zip([clf_A, clf_B, clf_C, clf_D],\n",
    "                             [parameters_A, parameters_B, parameters_C, parameters_D]):\n",
    "    clf_name = clf.__class__.__name__\n",
    "    best_clf[clf_name], results[clf_name]= optimize_model(clf, parameters, X_train, y_train, X_val, y_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 368,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x1728 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# show results\n",
    "fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize = (15, 24))\n",
    "ax3.set_ylim((0.9, 1))\n",
    "ax4.set_ylim((0.9, 1))\n",
    "for axi, compare in zip([ax1, ax2, ax3, ax4], [\"train_time\", \"pred_time\", \"acc_train\", \"acc_val\"]):\n",
    "    x = [\"Log\", \"DecTree\", \"Random\", \"SVC\"]\n",
    "    y = [results[clf.__class__.__name__][compare] \n",
    "         for clf in [clf_A, clf_B, clf_C, clf_D] ]\n",
    "    sns.barplot(x, y, ax = axi)\n",
    "    axi.set_ylabel(compare)\n",
    "        \n",
    "plt.show()\n",
    "fig.savefig(\"Four_optimized_model_compare.svg\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that RandomForest achieves highest validation accuracy and costs accpetable predicting and training time. Thus, RandomForest is chosen as the final model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 369,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Optimized Model\n",
      "------\n",
      "Final accuracy score on the validation data: 0.9822\n"
     ]
    }
   ],
   "source": [
    "print(\"\\nOptimized Model\\n------\")\n",
    "print(\"Final accuracy score on the validation data: {:.4f}\".format(best_clf[\"SVC\"].score(X_val, y_val)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## Feature Importance\n",
    "Not all the features contribute a lot. In fact, some important features can provide enough information.\n",
    "\n",
    "For example, the male's voice sounds thick than the female's. So, perhaps we can get pretty good results just using `meanfun`.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### How accuracy changes with important features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.base import clone\n",
    "def train_important_feature(learner, sorted_importance, feature_ctr, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # reduce feature space\n",
    "    columns_reduced = X_train.columns.values[sorted_importance[:feature_ctr]] \n",
    "    X_train_reduced = X_train[columns_reduced]\n",
    "    X_val_reduced = X_val[columns_reduced]\n",
    "\n",
    "    # get a model based on parameters of best estimator\n",
    "    print(\"Training on model with {} most important feature(s)\".format(feature_ctr))\n",
    "    clf_on_reduced = (clone(learner)).fit(X_train_reduced, y_train)\n",
    "\n",
    "    # predict\n",
    "    train_reduced_predictions = clf_on_reduced.predict(X_train_reduced)\n",
    "    val_reduced_predictions = clf_on_reduced.predict(X_val_reduced)\n",
    "    \n",
    "    return accuracy_score(y_train, train_reduced_predictions), accuracy_score(y_val, val_reduced_predictions)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The way to extract feature importance from SVC is finded there: https://medium.com/@aneesha/visualising-top-features-in-linear-svm-with-scikit-learn-and-matplotlib-3454ab18a14d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 326,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training on model with 1 most important feature(s)\n",
      "Training on model with 2 most important feature(s)\n",
      "Training on model with 3 most important feature(s)\n",
      "Training on model with 4 most important feature(s)\n",
      "Training on model with 5 most important feature(s)\n",
      "Training on model with 6 most important feature(s)\n",
      "Training on model with 7 most important feature(s)\n",
      "Training on model with 8 most important feature(s)\n",
      "Training on model with 9 most important feature(s)\n",
      "Training on model with 10 most important feature(s)\n",
      "Training on model with 11 most important feature(s)\n",
      "Training on model with 12 most important feature(s)\n",
      "Training on model with 13 most important feature(s)\n",
      "Training on model with 14 most important feature(s)\n",
      "Training on model with 15 most important feature(s)\n",
      "Training on model with 16 most important feature(s)\n",
      "Training on model with 17 most important feature(s)\n",
      "Training on model with 18 most important feature(s)\n",
      "Training on model with 19 most important feature(s)\n"
     ]
    }
   ],
   "source": [
    "importance_results_train = []\n",
    "importance_results_val = []\n",
    "\n",
    "#best_random_forest = best_clf[\"RandomForestClassifier\"]\n",
    "# train a model\n",
    "# model = RandomForestClassifier(random_state = 125)\n",
    "model = SVC(kernel=\"linear\")\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "# get importances\n",
    "importances = abs(model.coef_.ravel())\n",
    "#importances = abs(best_clf[\"SVC\"].coef_.ravel())\n",
    "#importances = best_random_forest.feature_importances_\n",
    "sorted_importances = np.argsort(importances)[::-1]\n",
    "for feature_ctr in range(1,20):\n",
    "    acc_train, acc_val = train_important_feature(best_clf[\"SVC\"],\n",
    "            sorted_importances, feature_ctr, X_train, y_train, X_val, y_val)\n",
    "    importance_results_train.append(acc_train)\n",
    "    importance_results_val.append(acc_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 327,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1224x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 1, figsize = (17, 10))\n",
    "ax.plot(range(1,20), importance_results_train, 'r',\n",
    "        range(1,20), importance_results_val)\n",
    "ax.set_xlabel(\"important features\")\n",
    "ax.set_ylabel(\"accuracy\")\n",
    "ax.legend(('Train', 'Val'), loc='upper right')\n",
    "plt.title(\"Reduced Importance Performance\")\n",
    "plt.show()\n",
    "fig.savefig(\"reduce_performance.svg\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "According to the plot, **13** is the point with least difference between training accuracy and validation accuracy among the points above 0.980."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The Top-13 important Features"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, list the features according to importance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 331,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x864 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# sort importances\n",
    "columns = X_train.columns.values[sorted_importances[:20]]\n",
    "values = importances[sorted_importances][:20]\n",
    "\n",
    "# draw\n",
    "fig, _ = plt.subplots(figsize = (12, 12))\n",
    "sns.barplot(columns, values)\n",
    "plt.show()\n",
    "fig.savefig(\"Feature_importance.svg\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The top-13 important features are `meanfun`, `IQR`, `Q75`, `minfun`, `sfm`, `sp.ent`, `Q25`, `modindx`, `skew`, `median`, `sd`, `mode`, `mindom`. And 3 of them, `IQR`, `meanfun`, `sd` matches observation before.\n",
    "\n",
    "\n",
    "### Reduce Feature Space\n",
    "\n",
    "Only using the top-13 important feautures can simplift the model, save time for training and predicting. And it is convenient for application since only 13 features of original wave need to be extracted."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 387,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       meanfun       IQR       Q75    minfun       sfm    sp.ent       Q25  \\\n",
      "2251  0.481845  0.173697  0.897230  0.032201  0.212250  0.593906  0.783875   \n",
      "428   0.287846  0.410421  0.834693  0.101339  0.674451  0.752876  0.497868   \n",
      "1212  0.387724  0.468023  0.939575  0.195740  0.454276  0.635609  0.540306   \n",
      "1628  0.555454  0.328917  0.841205  0.031464  0.613898  0.750145  0.582329   \n",
      "1128  0.450920  0.414264  0.910268  0.198466  0.478463  0.622718  0.564672   \n",
      "\n",
      "       modindx      skew    median        sd      mode    mindom  \n",
      "2251  0.156208  0.055598  0.878283  0.249108  0.912795  0.230108  \n",
      "428   0.194949  0.078932  0.764902  0.467454  0.840580  0.281720  \n",
      "1212  0.197688  0.063869  0.720740  0.488516  0.932341  0.040860  \n",
      "1628  0.157884  0.068367  0.819047  0.663784  0.816421  0.006452  \n",
      "1128  0.092603  0.070121  0.595770  0.469499  0.499176  0.040860  \n",
      "Final Model trained on full data\n",
      "------\n",
      "Accuracy on train data: 0.9926\n",
      "Accuracy on validation data: 0.9822\n",
      "\n",
      "Final Model trained on reduced data\n",
      "------\n",
      "Accuracy on train data: 0.9867\n",
      "Accuracy on validation data: 0.9862\n"
     ]
    }
   ],
   "source": [
    "from sklearn.base import clone\n",
    "\n",
    "results[\"reduced_SVC\"] = {}\n",
    "\n",
    "# reduce feature space\n",
    "X_train_reduced = X_train[X_train.columns.values[sorted_importances[:13]]]\n",
    "X_val_reduced = X_val[X_val.columns.values[sorted_importances[:13]]]\n",
    "\n",
    "# get a model based on parameters of best estimator\n",
    "clf_on_reduced = clone(best_clf[\"SVC\"])\n",
    "start = time()\n",
    "clf_on_reduced.fit(X_train_reduced, y_train)\n",
    "end = time()\n",
    "\n",
    "results[\"reduced_SVC\"][\"train_time\"] = end - start;\n",
    "\n",
    "start = time()\n",
    "clf_on_reduced.predict(X_val_reduced)\n",
    "end = time()\n",
    "\n",
    "results[\"reduced_SVC\"][\"pred_time\"] = end - start;\n",
    "\n",
    "\n",
    "# sum up\n",
    "print(\"Final Model trained on full data\\n------\")\n",
    "print(\"Accuracy on train data: {:.4f}\".format(results[\"SVC\"][\"acc_train\"]))\n",
    "print(\"Accuracy on validation data: {:.4f}\".format(results[\"SVC\"][\"acc_val\"]))\n",
    "print(\"\\nFinal Model trained on reduced data\\n------\")\n",
    "print(\"Accuracy on train data: {:.4f}\".format(clf_on_reduced.score(X_train_reduced, y_train)))\n",
    "print(\"Accuracy on validation data: {:.4f}\".format(clf_on_reduced.score(X_val_reduced, y_val)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The reduced model has similiar accuracy on training dataset and validation dataset, so it should have good generalizaion performance."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Testing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 371,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Final LogisticRegression trained on full data\n",
      "------\n",
      "Final accuracy score on the train data: 0.9704\n",
      "Final accuracy score on the val data: 0.9704\n",
      "Final accuracy score on the test data: 0.9637\n",
      "\n",
      "Final DecisionTreeClassifier trained on full data\n",
      "------\n",
      "Final accuracy score on the train data: 0.9990\n",
      "Final accuracy score on the val data: 0.9783\n",
      "Final accuracy score on the test data: 0.9653\n",
      "\n",
      "Final RandomForestClassifier trained on full data\n",
      "------\n",
      "Final accuracy score on the train data: 1.0000\n",
      "Final accuracy score on the val data: 0.9803\n",
      "Final accuracy score on the test data: 0.9795\n",
      "\n",
      "Final SVC trained on full data\n",
      "------\n",
      "Final accuracy score on the train data: 0.9926\n",
      "Final accuracy score on the val data: 0.9822\n",
      "Final accuracy score on the test data: 0.9811\n"
     ]
    }
   ],
   "source": [
    "for model_name in best_clf.keys():\n",
    "    print(\"\\nFinal {} trained on full data\\n------\".format(model_name))\n",
    "    print(\"Final accuracy score on the train data: {:.4f}\".format(results[model_name][\"acc_train\"]))\n",
    "    print(\"Final accuracy score on the val data: {:.4f}\".format(results[model_name][\"acc_val\"]))\n",
    "    print(\"Final accuracy score on the test data: {:.4f}\".format(best_clf[model_name].score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 378,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Final LogisticRegression trained on full data\n",
      "------\n",
      "Training time: 0.0122\n",
      "Predicting time: 0.0004\n",
      "\n",
      "Final DecisionTreeClassifier trained on full data\n",
      "------\n",
      "Training time: 0.0373\n",
      "Predicting time: 0.0004\n",
      "\n",
      "Final RandomForestClassifier trained on full data\n",
      "------\n",
      "Training time: 1.0419\n",
      "Predicting time: 0.0290\n",
      "\n",
      "Final SVC trained on full data\n",
      "------\n",
      "Training time: 0.0669\n",
      "Predicting time: 0.0585\n"
     ]
    }
   ],
   "source": [
    "for model_name in best_clf.keys():\n",
    "    print(\"\\nFinal {} trained on full data\\n------\".format(model_name))\n",
    "    print(\"Training time: {:.4f}\".format(results[model_name][\"train_time\"]))\n",
    "    print(\"Predicting time: {:.4f}\".format(results[model_name][\"pred_time\"]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 379,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Final Model trained on reduced data\n",
      "------\n",
      "Final accuracy score on the train data: 0.9867\n",
      "Final accuracy score on the val data: 0.9862\n",
      "Final accuracy score on the test data: 0.9795\n"
     ]
    }
   ],
   "source": [
    "X_test_reduced = X_test[X_test.columns.values[sorted_importances[:13]]]\n",
    "print(\"\\nFinal Model trained on reduced data\\n------\")\n",
    "print(\"Final accuracy score on the train data: {:.4f}\".format(clf_on_reduced.score(X_train_reduced, y_train)))\n",
    "print(\"Final accuracy score on the val data: {:.4f}\".format(clf_on_reduced.score(X_val_reduced, y_val)))\n",
    "print(\"Final accuracy score on the test data: {:.4f}\".format(clf_on_reduced.score(X_test_reduced, y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 382,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Final Model trained on reduced data\n",
      "------\n",
      "Training time: 0.0789\n",
      "Predicting time: 0.0077\n"
     ]
    }
   ],
   "source": [
    "print(\"\\nFinal Model trained on reduced data\\n------\")\n",
    "print(\"Training time: {:.4f}\".format(results[\"reduced_SVC\"][\"train_time\"]))\n",
    "print(\"Predicting time: {:.4f}\".format(results[\"reduced_SVC\"][\"pred_time\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After reduction, the model has low variances(< 1% difference between training data and testing data) and still achieve high testing accuracy of 97.95%. Considering the decreased amount of calculation and simplification of feature extracting, it is reasonible to use the reduced model for application."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## Save Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 383,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('model.pkl', 'wb') as fid:\n",
    "    pickle.dump(clf_on_reduced, fid,2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 384,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "features_min_reduced = features_min[sorted_importances[:13]]\n",
    "features_max_reduced = features_max[sorted_importances[:13]]\n",
    "with open('scale.pkl', 'wb') as fid:\n",
    "    pickle.dump((features_min_reduced, features_max_reduced), fid,2) "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
